package com.x9space.framework.elastic.annotation;


import com.x9space.framework.elastic.enums.BoolQueryType;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.Operator;

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@QueryBuilderMark
public @interface MultiMatch {



    /**
     * 四种， must ,should , must_not, should
     * @return
     */
    BoolQueryType queryType() default BoolQueryType.MUST;

    /**
     *  在哪几个字段里面进行全文检索
     * @return
     */
    String[] fields();

    /**
     * 多字段全文检索类型， 默认best_fields, 按最佳字段的得分进行排序
     * @return
     */
    MultiMatchQueryBuilder.Type type() default MultiMatchQueryBuilder.Type.BEST_FIELDS;

    /**
     *  查询是的分词器指定，不指定，则使用 待查询字段的查询分词器
     * @return
     */
    String analyzer() default "";

    /**
     * 针对BEST_FIELDS的得分模式，默认为0，就是其他不是最优字段的得分被丢弃
     * 可以选0到1之间的浮点数， 0.1~0.3是一个合适的范围
     * @return
     */
    float tieBreaker() default 0.1f;

    /**
     * 查询文本在分词后，每个字段至少有 多少个关键字 与其匹配,使用方式是数字 或者 百分比
     * @return
     */
    String minimumShouldMatch() default "1";

    /**
     * and 表示全文检索的所有字段 与CROSS_FIELDS配套使用
     * @return
     */
    Operator operator() default Operator.AND;

}
